/**
 * Framework Tec - Interface Bus
 *
 * @author Abdessamad HAILASS
 * @since 2011
 **/

package tec;

class TestJaugeNaturel {
	// Permet de lancer l'exécution de la suite des tests.
	protected static void lancer () {
		System.out.print ("Tests JaugeNaturel ");

		System.out.print (".");
		testDansIntervalle ();

		System.out.print (".");
		testInferieurIntervalle ();

		System.out.print (".");
		testSuperieurIntervalle ();

		System.out.print (".");
		testDeplacement ();

		System.out.print (".");
		testLimiteVigieMaxInferieurVigieMin ();

		System.out.print (".");
		testMaxEgaleMin ();

		System.out.print (" [OK]\n");
	}
    
	// Etat après instanciation pour une valeur de départ dans l'intervalle de vigie.
	protected static void testDansIntervalle () {
		JaugeNaturel jauge = new JaugeNaturel ( -345, 67899, 100 );
		assert   jauge.estVert  ();		
		assert ! jauge.estBleu  ();
		assert ! jauge.estRouge ();
	}
    
    // Test les méthodes incrementer() et decrementer().
	protected static void testDeplacement () {
		JaugeNaturel jauge = new JaugeNaturel ( -345, 67899, -343 );

		// Sortir de l'intervalle ..
		jauge.decrementer ();
		jauge.decrementer ();
		jauge.decrementer ();

		// Verification ...
		assert ! jauge.estVert  ();		
		assert   jauge.estBleu  ();
		assert ! jauge.estRouge ();

		// Revenir à l'intervalle
		jauge.incrementer ();
		jauge.incrementer ();
		jauge.incrementer ();
		jauge.incrementer ();

		// Verification ...
		assert   jauge.estVert  ();		
		assert ! jauge.estBleu  ();
		assert ! jauge.estRouge ();
	}
    
	// Etat après instanciation pour une valeur de départ:
	// 1) depart < vigieMin < vigieMax,
	// 2) depart = vigieMin < vigieMax.
	protected static void testInferieurIntervalle () {
		JaugeNaturel jauge = new JaugeNaturel ( -345, 67899, -346 );

		// Verification ...
		assert ! jauge.estVert  ();
		assert   jauge.estBleu  ();
		assert ! jauge.estRouge ();
		
		jauge.incrementer ();
		assert ! jauge.estVert  ();
		assert   jauge.estBleu  ();
		assert ! jauge.estRouge ();
		
		jauge.incrementer ();
		assert   jauge.estVert  ();
		assert ! jauge.estBleu  ();
		assert ! jauge.estRouge ();
	}

   // A l'instanciation, vérifier l'état dans le cas limite où vigieMax < depart < vigieMin.
	protected static void testLimiteVigieMaxInferieurVigieMin () {
		JaugeNaturel jauge;
		try {
			jauge = new JaugeNaturel ( 200, 100, 150 );
		} catch (java.lang.IllegalArgumentException e) {
			jauge = null;
		}
		assert jauge == null;
	}

   /**
	 * Etat dans les cas limites
	 * 1) vigieMin = VigieMax < depart
	 * 2) vigieMin = VigieMax = depart
	 * Etat incoherant : Rouge et Bleu en même temps !
	 */
	protected static void testMaxEgaleMin () {
		JaugeNaturel jauge = new JaugeNaturel (100, 100, 100);
		assert ! jauge.estVert  ();
		assert   jauge.estBleu  ();
		assert   jauge.estRouge ();		
		
		jauge = new JaugeNaturel (100, 100, 90);
		assert ! jauge.estVert  ();
		assert   jauge.estBleu  ();
		assert ! jauge.estRouge ();		
		
		jauge = new JaugeNaturel (100, 100, 200);
		assert ! jauge.estVert  ();
		assert ! jauge.estBleu  ();
		assert   jauge.estRouge ();		
	}
	
   /**
	 * Etat après instanciation pour une valeur de départ:
	 * 1) vigieMin < vigieMax < depart
	 * 2) vigieMin < vigieMax = depart.
	 */
	protected static void testSuperieurIntervalle () {
		JaugeNaturel jauge = new JaugeNaturel ( 100, 143, 144 );

		// Verification ...
		assert ! jauge.estVert  ();
		assert ! jauge.estBleu  ();
		assert   jauge.estRouge ();
		
		jauge.decrementer ();
		assert ! jauge.estVert  ();
		assert ! jauge.estBleu  ();
		assert   jauge.estRouge ();
	}
	
	/**
	 * <p>
	 * Test de PourcentageOccupation () dans les cas suivants :
	 * 
	 * <ol>
	 *   <li>vigieMin < depart < vigieMax</li>
	 *   <li>depart < vigieMin < VigieMax</li>
	 *   <li>vigieMin < VigieMax < depart</li>
	 *   <li>vigieMin = depart < vigieMax</li>
	 *   <li>vigieMin < vigieMax = depart </li>
	 * </ol>
	 * </p>
	 * 
	 *	<p>
	 * Le cas ou vigieMax <= VigieMin est traité dans
	 * <code>testLimiteVigieMaxInferieurVigieMin ()</code> et dans
	 * <code>testMaxEgaleMin ()</code>
	 * </p>
	 */
	protected static void testPourcentageOccupation () {
		JaugeNaturel jauge = new JaugeNaturel (-100, 100, 0);
		assert jauge.pourcentageOccupation () == 50.f;
		
		jauge = new JaugeNaturel (-100, 100, -200);
		assert jauge.pourcentageOccupation () == -50.f;
		
		jauge = new JaugeNaturel (-100, 100, 200);
		assert jauge.pourcentageOccupation () == 150.f;
		
		jauge = new JaugeNaturel (-100, 100, -100);
		assert jauge.pourcentageOccupation () == 0.f;
		
		jauge = new JaugeNaturel (-100, 100, 100);
		assert jauge.pourcentageOccupation () == 100.f;
	}
}

